Migration Guide from MAX to XMediator
Integration
This section helps you migrate from the AppLovin MAX SDK to the XMediator SDK in your ReactNative project.
Initialize the SDK Comparison
MAX
import AppLovinMAX, { Configuration } from "react-native-applovin-max";
⋮
AppLovinMAX.initialize("«your-SDK-key»").then((conf: Configuration) => {
// SDK is initialized, start loading ads
}).catch(error => {
// Failed to initialize SDK
});
XMediator
In the root of your app, usually in the App.tsx file, add the following code:
import { XMediatorProvider } from "react-native-xmediator";
export default function App() {
return (
<XMediatorProvider
appKey={"<YOUR_APP_KEY>"}
// other props
>
{/* your app code... */}
</XMediatorProvider>
);
}
For official documentation:
Banner Ads
API Method Comparison
Operation | MAX | XMediator |
---|---|---|
Hook | To start using banners, just call useBanner() hook. const { create, hide, show, isShowing } = useBanner(); | |
Create Banner | BannerAd.createAd(BANNER_AD_UNIT_ID, AdViewPosition.BOTTOM_CENTER); | create({placementId: "<placement-id>",size: BannerSize.Phone,position: BannerPosition.Bottom,}); |
Show Banner | BannerAd.showAd(«ad-unit-ID»); | show("<placement-id>"); |
Hide Banner | BannerAd.hideAd(«ad-unit-ID»); | hide("<placement-id>"); |
Key Differences
Feature | MAX | XMediator |
---|---|---|
Ad Unit ID | Yes | Placement ID |
Ad Format | Banner, MREC | Banner, MREC |
Position | Enum (top, bottom, etc.) | String ("top", "bottom", etc.) |
Size | Controlled by AdFormat | Controlled by BannerAd props |
Event Handling | addEventListener or props | hook useBannerEvents |
Reload/Refresh | Automatic, or via methods | Automatic |
Callback Comparison
Event | MAX | XMediator |
---|---|---|
Hook | useBannerEvents({...}); | |
Loaded | onAdLoaded={(adInfo\: AdInfo)} | onLoaded\: (placementId, loadResult) |
Load Failed | onAdLoadFailed={(errorInfo\: AdLoadFailedInfo)} | |
Clicked | onAdClicked={(adInfo\: AdInfo)} | onClicked\: (placementId) |
Expanded | onAdExpanded={(adInfo\: AdInfo)} | |
Collapsed | onAdCollapsed={(adInfo\: AdInfo)} | |
Revenue Paid | onAdRonAdRevenuePaid={(adInfo\: AdRevenueInfo)} | onImpression\: (placementId, impressionData) |
For official documentation:
Interstitial Ads
API Method Comparison
Operation | MAX | XMediator |
---|---|---|
Hooks | To start using Interstitial Ads, just call useInterstitial() hook. const { show, isR } = useInterstitial(); | |
Load Interstitial | InterstitialAd.loadAd("<ad-unit-id>") | |
Show Interstitial | InterstitialAd.showAd("<ad-unit-id>") | show("<placement-id>"); |
Check Ready | InterstitialAd.isReady("<ad-unit-id>") | isReady("<placement-id>") |
Key Differences
Feature | MAX | XMediator |
---|---|---|
Ad Unit ID | Yes | Placement ID |
Load | Explicit | Auto loading |
Show/Ready Check | Yes | Yes |
Auto Retry | No | Yes (exponential backoff) |
Event Handling | const initializeInterstitialAds = () => { ... } | useInterstitialEvents({...}); |
Reload/Refresh | Manual | Automatic (with retry) |
Callback Comparison
Event | MAX | XMediator |
---|---|---|
Hook | const initializeInterstitialAds = () => { ... } | useInterstitialEvents({...}); |
Loaded | InterstitialAd.addAdLoadedEventListener={(adInfo: AdInfo)} | onLoaded: (placementId, loadResult) |
Load Failed | InterstitialAd.addAdLoadFailedEventListener((errorInfo: AdLoadFailedInfo) | - |
Displayed | InterstitialAd.addAdDisplayedEventListener((adInfo: AdInfo) | onShowed: (placementId) |
Show Failed | InterstitialAd.addAdFailedToDisplayEventListener((adInfo: AdDisplayFailedInfo) | onFailedToShow: (placementId) |
Clicked | InterstitialAd.addAdClickedEventListener((adInfo: AdInfo) | onClicked: (placementId) |
Hidden | InterstitialAd.addAdHiddenEventListener((adInfo: AdInfo) | onDismissed: (placementId) |
Revenue Paid | onImpression: (placementId, impressionData) |
For official documentation:
Rewarded Ads
API Method Comparison
Operation | MAX | XMediator |
---|---|---|
Hooks | To start using Rewarded Ads, just call useRewarded() hook. const { show, isReady } = useRewarded(); | |
Load Rewarded | RewardedAd.loadAd("<ad-unit-ID>") | |
Show Rewarded | RewardedAd.showAd("<ad-unit-ID>") | show("<placement-id>"); |
Check Ready | RewardedAd.isReady("<ad-unit-ID>") | isReady("<placement-id>") |
Feature | MAX | XMediator |
---|---|---|
Ad Unit ID | Yes | Placement ID |
Load | Explicit | Auto loading |
Show/Ready Check | Yes | Yes |
Auto Retry | No | Yes (exponential backoff) |
Event Handling | const initializeRewardedAds = () => { ... } | useRewardedEvents({...}); |
Reload/Refresh | Manual | Automatic (with retry) |
Callback Comparison
Event | MAX | XMediator SDK |
---|---|---|
Hook | const initializeRewardedAds = () => { ... } | useRewardedEvents({...}); |
Loaded | RewardedAd.addAdLoadedEventListener={(adInfo: AdInfo)} | onLoaded: (placementId, loadResult) |
Load Failed | RewardedAd.addAdLoadFailedEventListener((errorInfo: AdLoadFailedInfo) | - |
Displayed | RewardedAd.addAdDisplayedEventListener((adInfo: AdInfo) | onShowed: (placementId) |
Show Failed | RewardedAd.addAdFailedToDisplayEventListener((adInfo: AdDisplayFailedInfo) | onFailedToShow: (placementId, showError) |
Clicked | RewardedAd.addAdClickedEventListener((adInfo: AdInfo) | onClicked: (placementId) |
Hidden | RewardedAd.addAdHiddenEventListener((adInfo: AdInfo) | onDismissed: (placementId) |
Revenue Paid | onImpression: (placementId, impressionData) | |
Earned Reward | RewardedAd.addAdReceivedRewardEventListener((adInfo: AdRewardInfo) | onEarnedReward: (placementId) |
For official documentation:
Notes
- Replace all Ad Unit IDs with Placement IDs when migrating to XMediator.
- XMediator SDK for React Native manages some retries and refreshes automatically via the admin tool.
- Review the official MAX React Native docs and XMediator React Native docs for advanced usage and integration tips.
Additional Notes
- XMediator SDK auto-loads and retries ads after dismiss/fail (no manual retry logic needed).
- Ad Space is available for analytics/tracking in XMediator.
- Remove listeners to clean up ads in XMediator; explicit destroy is not needed.
- Use the official documentation for the latest updates and best practices.
References: